Java进阶-回顾 TreeSet 集合应该掌握什么

  1. 集合对象的创建
  2. 向集合中添加元素
  3. 从集合中取出某个元素
  4. 遍历集合
  5. 测试 TreeSet 集合的特点:可排序
  6. 测试 TreeSet 集合中存储的类型是自定义的
  7. 测试实现 Comparable 接口的方式
  8. 测试实现 Comparator 接口的方式(最好测试下匿名内部类的方式)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;

public class TreeSetTest {

public static void main(String[] args) {
// 编写比较器可以改变规则
TreeSet<Integer> ts = new TreeSet<>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1; // 自动拆箱
}
});

// 添加元素
ts.add(1);
ts.add(12);
ts.add(100);
ts.add(11);
ts.add(12);

// 遍历(迭代器方式)
Iterator<Integer> it = ts.iterator();
while (it.hasNext()) {
Integer i = it.next();
System.out.println(i);
}

// 遍历(foreach)
for (Integer x : ts) {
System.out.println(x);
}

TreeSet<A> atree = new TreeSet<>();
atree.add(new A(10));
atree.add(new A(20));
atree.add(new A(5));
atree.add(new A(10));

// 遍历
for (A a : atree) {
System.out.println(a);
}

// TreeSet<B> btree = new TreeSet<>(new BComparator());
// 匿名内部类
TreeSet<B> btree = new TreeSet<>(new Comparator<B>() {

@Override
public int compare(B o1, B o2) {
return o1.i - o2.i;
}

});
btree.add(new B(10));
btree.add(new B(20));
btree.add(new B(5));
btree.add(new B(10));

// 遍历
for (B b : btree) {
System.out.println(b);
}
}
}

// 第一种方式:实现 Comparable 接口
class A implements Comparable<A> {
int i;

public A(int i) {
super();
this.i = i;
}

@Override
public String toString() {
return "A [i=" + i + "]";
}

@Override
public int compareTo(A o) {
return this.i - o.i;
}
}

class B {
int i;
public B(int i) {
super();
this.i = i;
}

@Override
public String toString() {
return "B [i=" + i + "]";
}
}

// 比较器
class BComparator implements Comparator<B> {

@Override
public int compare(B o1, B o2) {
return o1.i - o2.i;
}
}